// pages/cart/cart.js
const API = require('../../utils/api.js');
const pathUrl = require('../../utils/common.js');

Page({
  /**
   * 页面的初始数据
   */
  data: {
    cartItems: [], // 购物车商品列表
    totalPrice: 0.00, // 总价
    totalCount: 0, // 商品总数
    selectedCount: 0, // 选中的商品数量
    selectedPrice: 0.00, // 选中的商品总价
    selectAll: false, // 是否全选
    isLogin: false, // 用户是否登录
    loading: false, // 加载状态
    showPayModal: false, // 控制支付弹窗显示
    payMethod: 'wechat', // 默认支付方式
    payLoading: false // 支付中状态
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    // 检查用户登录状态
    this.checkLoginStatus();
  },
  
  /**
   * 强制更新选中价格，确保视图正确显示
   */
  forceUpdateSelectedPrice() {
    console.log('强制更新前的selectedPrice:', this.data.selectedPrice);
    // 确保有明确的小数格式
    const formattedPrice = Number(this.data.selectedPrice).toFixed(2);
    this.setData({
      selectedPrice: formattedPrice
    });
    console.log('强制更新后的selectedPrice:', formattedPrice);
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    // 每次显示页面时加载购物车数据
    this.loadCartData();
  },

  /**
   * 检查用户登录状态
   */
  checkLoginStatus() {
    const token = wx.getStorageSync('token');
    this.setData({
      isLogin: !!token
    });
  },

  /**
   * 加载购物车数据
   */
  loadCartData() {
    this.setData({ loading: true });
    
    const cartData = wx.getStorageSync('shopCar') || [];
    
    if (cartData.length === 0) {
      this.setData({ loading: false });
      return;
    }
    
    const productIds = cartData.map(v => v.productId);
    API.getProductInfoByCart(productIds).then(res=>{
      for(let i=0;i<res.length;i++){
        res[i].image = pathUrl + res[i].image
        const item = cartData.find(v => v.productId == res[i].id);
        res[i].count = item.num||1
        // 设置默认选中状态
        res[i].selected = true
      }
      this.setData({
        cartItems:res,
        loading: false
      })
      // 在数据加载完成后计算总价
      this.calculateTotal();
      // 数据加载完成后强制更新选中价格
      setTimeout(() => {
        this.forceUpdateSelectedPrice();
      }, 100);
    }).catch(error => {
      console.error('加载购物车数据失败:', error);
      this.setData({ loading: false });
      // 加载失败时也使用模拟数据
      const mockData = [
        {
          id: 1,
          productName: '专业网球拍',
          specs: '碳纤维材质，27英寸',
          afterPrice: 899.00,
          beforePrice: 1299.00,
          image: '/images/courts.png',
          count: 1,
          selected: true
        },
        {
          id: 2,
          productName: '网球训练球(12个装)',
          specs: '高弹性，耐打',
          afterPrice: 68.00,
          beforePrice: 99.00,
          image: '/images/courts.png',
          count: 2,
          selected: true
        }
      ];
      this.setData({ cartItems: mockData });
      this.calculateTotal();
      // 数据加载完成后强制更新选中价格
      setTimeout(() => {
        this.forceUpdateSelectedPrice();
      }, 100);
    })
  },

  /**
   * 计算总价和数量
   */
  calculateTotal() {
    const cartItems = this.data.cartItems;
    let totalCount = 0;
    let totalPrice = 0;
    let selectedCount = 0;
    let selectedPrice = 0;
    let selectAll = true;
    
    cartItems.forEach(item => {
      totalCount += item.count;
      // 确保afterPrice存在，否则使用price或默认为0
      const price = item.afterPrice || item.price || 0;
      totalPrice += price * item.count;
      
      if (item.selected) {
        selectedCount += item.count;
        selectedPrice += price * item.count;
      } else {
        selectAll = false;
      }
    });
    
    // 确保selectedPrice有值，默认为0
    selectedPrice = selectedPrice || 0;
    
    this.setData({
      totalCount,
      totalPrice: Number(totalPrice.toFixed(2)),
      selectedCount,
      selectedPrice: Number(selectedPrice.toFixed(2)),
      selectAll
    });
    
    console.log('计算后的值:', {
      selectedCount,
      selectedPrice: Number(selectedPrice.toFixed(2))
    });
  },

  /**
   * 选择/取消选择商品
   */
  selectItem(e) {
    const { index } = e.currentTarget.dataset;
    const cartItems = [...this.data.cartItems];
    cartItems[index].selected = !cartItems[index].selected;
    
    this.setData({ cartItems });
    this.saveCartData();
    this.calculateTotal();
  },

  /**
   * 全选/取消全选
   */
  selectAll() {
    const selectAll = !this.data.selectAll;
    const cartItems = this.data.cartItems.map(item => ({
      ...item,
      selected: selectAll
    }));
    
    this.setData({ cartItems, selectAll });
    this.saveCartData();
    this.calculateTotal();
  },

  /**
   * 增加商品数量
   */
  increaseCount(e) {
    const { index } = e.currentTarget.dataset;
    const cartItems = [...this.data.cartItems];
    cartItems[index].count += 1;
    this.setData({ cartItems });
    this.saveCartData();
    this.calculateTotal();
  },

  /**
   * 减少商品数量
   */
  decreaseCount(e) {
    const { index } = e.currentTarget.dataset;
    const cartItems = [...this.data.cartItems];
    
    if (cartItems[index].count > 1) {
      cartItems[index].count -= 1;
      
      this.setData({ cartItems });
      this.saveCartData();
      this.calculateTotal();
    }
  },

  /**
   * 删除商品
   */
  deleteItem(e) {
    const { index } = e.currentTarget.dataset;
    wx.showModal({
      title: '确认删除',
      content: '确定要从购物车中删除该商品吗？',
      success: (res) => {
        if (res.confirm) {
          const cartItems = [...this.data.cartItems];
          cartItems.splice(index, 1);
          
          this.setData({ cartItems });
          this.saveCartData();
          this.calculateTotal();
          
          wx.showToast({ title: '删除成功' });
        }
      }
    });
  },

  /**
   * 删除选中的商品
   */
  deleteSelected() {
    // 检查是否有选中的商品
    const hasSelected = this.data.cartItems.some(item => item.selected);
    
    if (!hasSelected) {
      wx.showToast({ title: '请选择要删除的商品', icon: 'none' });
      return;
    }
    
    wx.showModal({
      title: '确认删除',
      content: '确定要删除选中的商品吗？',
      success: (res) => {
        if (res.confirm) {
          const cartItems = this.data.cartItems.filter(item => !item.selected);
          
          this.setData({ cartItems });
          this.saveCartData();
          this.calculateTotal();
          
          wx.showToast({ title: '删除成功' });
        }
      }
    });
  },

  /**
   * 保存购物车数据到本地存储
   */
  saveCartData() {
    try {
      // 更新shopCar数据，只包含productId和num字段
      let arr = [];
      this.data.cartItems.forEach(item => {
        arr.push({
          productId: item.id,
          num: item.count
        })
      });
      wx.setStorageSync('shopCar', arr);
    } catch (error) {
      console.error('保存购物车数据失败:', error);
      wx.showToast({ title: '保存购物车数据失败', icon: 'none' });
    }
  },

  /**
   * 跳转到商品详情页
   */
  goToProductDetail(e) {
    const item = e.currentTarget.dataset.item
    wx.navigateTo({
      url: `/pages/product-detail/product-detail?item=${JSON.stringify(item)}`
    })
  },

  /**
   * 去结算
   */
  checkout() {
    // 检查是否有选中的商品
    const hasSelected = this.data.cartItems.some(item => item.selected);
    
    if (!hasSelected) {
      wx.showToast({ title: '请选择要结算的商品', icon: 'none' });
      return;
    }
    
    // 显示支付弹窗
    this.setData({
      showPayModal: true
    });
  },
  
  /**
   * 关闭支付弹窗
   */
  closePayModal() {
    this.setData({
      showPayModal: false
    });
  },
  
  /**
   * 选择支付方式
   */
  selectPayMethod(e) {
    const { method } = e.currentTarget.dataset;
    this.setData({
      payMethod: method
    });
  },
  
  /**
   * 阻止事件冒泡
   */
  stopPropagation() {
    // 阻止事件冒泡，防止点击弹出框内容时关闭弹出框
    // 不直接使用e.stopPropagation()以避免在某些环境下报错
  },
  
  /**
   * 确认支付
   */
  confirmPayment() {
    // 显示支付中状态
    this.setData({
      payLoading: true
    });
    // 模拟支付过程，2秒后支付成功
    this.setData({
      payLoading: false,
      showPayModal: false
    });
    // 移除已购买的商品
    // 获取未选中的商品（保留未选中的商品）
    const unselectedItems = this.data.cartItems.filter(item => !item.selected);
    //已选中的商品数据
    const selectedItems = this.data.cartItems.filter(item => item.selected);
    let submitArr = [];
    selectedItems.forEach(item => {
      submitArr.push({
        productId:item.id,
        num:item.count,
        price:item.afterPrice,
        productName:item.productName
      })
    });
    API.shopCartOrder(submitArr).then(res=>{
      this.setData({
        cartItems: unselectedItems
      });
      // 显示支付成功提示
      wx.showToast({
        title: '支付成功',
        icon: 'success',
        duration: 2000
      });
      // 保存更新后的购物车数据
      this.saveCartData();
      // 重新计算总价
      this.calculateTotal();
      // 如果购物车为空，可以跳转到其他页面
      if (unselectedItems.length === 0) {
        wx.navigateTo({
          url: '/pages/orders/orders?status=success'
        });
      }
    })
    
    
  },
  
  /**
   * 取消支付
   */
  cancelPayment() {
    this.setData({
      showPayModal: false
    });
  },

  /**
   * 去首页
   */
  goToHome() {
    wx.switchTab({ url: '/pages/shop/shop' });
  },

  /**
   * 下拉刷新
   */
  onPullDownRefresh() {
    this.loadCartData();
    wx.stopPullDownRefresh();
  },

  onHide(){
    //更新购物车信息
    let arr = [];
    this.data.cartItems.forEach(item => {
      console.log(item);
      arr.push({
        productId:item.id,
        num:item.count
      })
    });
    wx.setStorageSync('shopCar',arr);
  }
});